package cn.leaf.calculator;

import cn.leaf.calculator.bean.CalUnitBeanDefinition;
import cn.leaf.calculator.datasource.CalUnitDataSource;

import java.util.Collection;

/**
 * 公式计算器
 *
 * @author 李克国
 * @version 1.0.0

 */
public interface FormulaCalculator<T> extends Runnable {

    /**
     * 开始计算
     */
    void start();

    /**
     * 计算：实际计算逻辑，该方法会通过参数传入单个计算所用到的所有信息,包含参数，并很好的解决了其依赖冲突的问题
     *
     * @param calUnitBean 计算单元
     */
    boolean cal(CalUnitBeanDefinition<T> calUnitBean);

    /**
     * 设置 计算数据源
     * @param dataSource 数据源
     */
    void setDataSource(CalUnitDataSource<T> dataSource);

    /**
     * 获取计算结果
     * @return collection
     */
    Collection<T> getCalResults();
}
